package com.cskaoyan.config;

import com.cskaoyan.service.UserService;
import org.springframework.aop.framework.ProxyFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * @author stone
 * @date 2022/12/20 17:24
 */
@Configuration
@ComponentScan("com.cskaoyan")
public class SpringConfiguration {

    @Bean
    public ProxyFactoryBean userServiceProxy(UserService userService) {
        ProxyFactoryBean proxyFactoryBean = new ProxyFactoryBean();
        // 告知其谁做增强 → 提供委托类（目标类）Target组件
        proxyFactoryBean.setTarget(userService);
        // 告知其做什么样的增强 → 提供通知组件
        // 这个方法需要提供的值的类型是多个字符串，这个字符串的含义会是什么？
        // 通知组件的id（name）
        // 提供一个字符串格式的组件id，能够让其获得容器中的这个组件吗？ 1
        // ac.getBean(String) 可以取出容器中的组件的；ApplicationContext、BeanFactory都是容器
        // 如果给了我ApplicationContext或BeanFactory的实例，以及一个组件的id，大家能否获得这个组件？1
        // ProxyFactoryBean这个类 implements BeanFactoryAware → 通过setBeanFactory提供给当前组件一个BeanFactory的实例
        proxyFactoryBean.setInterceptorNames("customAdvice");
        return proxyFactoryBean;
    }
}
